package cn.iocoder.yudao.module.biz.dal.dataobject.contract;

import cn.iocoder.yudao.framework.mybatis.core.type.StringListTypeHandler;
import cn.iocoder.yudao.module.biz.dal.dataobject.contract.receive.ReceiveRecordDO;
import cn.iocoder.yudao.module.biz.dal.dataobject.contract.transformer.TransformerDO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;

import java.time.LocalDateTime;
import java.math.BigDecimal;
import java.util.List;

import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;

/**
 * 合同档案 DO
 *
 * @author 超级管理员
 */
@TableName(value = "san_biz_contract_archive", autoResultMap = true)
@KeySequence("san_biz_contract_archive_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库，可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ContractArchiveDO extends BaseDO {

    /**
     * id
     */
    @TableId
    private Long id;
    /**
     * 合同名称
     */
    private String contractName;
    /**
     * 合同编号
     */
    private String contractCode;
    /**
     * 委托单位id
     */
    private Long customerId;
    /**
     * 委托单位(甲方)名称
     */
    private String customerName;
    /**
     * 签约时间
     */
    private LocalDateTime signTime;
    /**
     * 用电户号id
     */
    private String powerAccountId;
    /**
     * 用电户号
     */
    private String powerAccount;
    /**
     * 项目编码
     */
    private String projectCode;
    /**
     * 甲方负责人
     */
    private String customerDirectorName;
    /**
     * 联系电话
     */
    private String contactNumber;
    /**
     * 乙方负责人
     */
    private String companyDirectorName;
    /**
     * 管理单元id
     */
    private Long manageUnitId;
    /**
     * 管理单元名称
     */
    private String manageUnitName;
    /**
     * 客户经理
     */
    private String costomerManager;
    /**
     * 用电位置省市区
     */
    private Long powerLocation;
    /**
     * 用电地址
     */
    private String powerAddress;
    /**
     * 用电片区
     */
    private String powerArea;
    /**
     * 合同服务项目
     */
    @TableField(typeHandler = StringListTypeHandler.class)
    private List<String> serviceContent;
    /**
     * 补充条款
     */
    private String supplement;
    /**
     * 变压器总数量
     */
    private Integer transformerAmount;
    /**
     * 变压器总容量
     */
    private Integer totalVolume;
    /**
     * 应安装监测表数量
     */
    private Integer measureAmount;
    /**
     * 合同开始时间
     */
    private LocalDateTime contractStartTime;
    /**
     * 合同终止时间
     */
    private LocalDateTime contractEndTime;
    /**
     * 合同服务期限
     */
    private Integer contractMonthNumber;
    /**
     * 合同服务期限大写
     */
    private String contractMonthText;
    /**
     * 月服务费
     */
    private BigDecimal feePerMontNumber;
    /**
     * 月服务费大写
     */
    private String feePerMontText;
    /**
     * 实际月服务费
     */
    private BigDecimal factFeePerMonthNumber;
    /**
     * 实际月服务费大写
     */
    private String factFeePerMonthText;
    /**
     * 合同总价
     */
    private BigDecimal contractPriceNumber;
    /**
     * 合同总价大写
     */
    private String contractPriceText;
    /**
     * 首次付款金额
     */
    private BigDecimal firstPay;
    /**
     * 首次支付时间
     */
    private LocalDateTime firstPayDate;
    /**
     * 分期期数
     */
    private Integer instalmentCount;
    /**
     * 分期支付收款间隔(月)
     */
    private Integer receiveInterval;
    /**
     * 每期支付金额
     */
    private BigDecimal intervalPay;
    /**
     * 服务单元id
     */
    private Long serviceUnitId;
    /**
     * 服务单元名称
     */
    private String serviceUnitName;
    /**
     * 服务经理
     */
    private String serviceManagerName;
    /**
     * 介绍人
     */
    private String introducer;
    /**
     * 介绍渠道
     */
    private String introduceChannel;
    /**
     * 备注
     */
    private String remark;
    /**
     * 附件
     */
    private String attachmentUrl;
    /**
     * 负责人id
     */
    private Long ownerUserId;
    /**
     * 合同状态
     */
    private String status;
    /**
     * 试用
     */
    private String isTest;
    /**
     * 合同类型
     */
    private String contractType;
    /**
     * 合同上交时间
     */
    private LocalDateTime contractSubmitTime;
    /**
     * 合同归档时间
     */
    private LocalDateTime contractCompleteTime;

    /**
     * 变压器列表
     */
    @TableField(exist = false)
    private List<TransformerDO> transformerList;

    /**
     * 接收记录列表
     */
    @TableField(exist = false)
    private List<ReceiveRecordDO> receiveRecordList;

    /**
     * 是否续期
     */
    private String isRenew;

    /**
     * 原始合同id
     */
    private Long originalContractId;
    /**
     * 审核失败原因
     */
    private String auditFailedReason;

    /**
     * 审核人id
     */
    private Long auditorId;
}